/* 优化-- 跟着步骤走 */

// 1) 安装express 依赖,并导入
const express = require('express')
var bodyParser = require('body-parser')
// 2) 创建服务器的实例对象
const app = express()
// 导入定义验证规则的包
const joi = require('joi')
// 4) 导入并配置 cors 中间件
const cors = require('cors')
app.use(cors())

//  5) 配置解析表单数据的中间件,注注意:这个中间件,只能解析 application/x-ww-form-url encoded 格式的表单数据
app.use(bodyParser.json())
app.use(express.urlencoded({ extended: false }))
const expressjwt = require('express-jwt')
const config = require('./config')
app.use(expressjwt({ secret: config.jwtSecretKey }).unless({ path: [/^\/api/, '/data/table/list', '/data/table/search'] }))
// 6 --> 去路由模块中写用户账号的注册和登录

// 8) 一定要在路由之前，封装 成功或失败 消息提示函数
const { message } = require('./hook/index')
app.use(message)

//标记-----------------------------------------------------------------------------
// 7 <-- 导入并使用路由模块
// 7.1 用户的登录注册
const userRouter = require('./router/var_user')
app.use('/api', userRouter)
// 7.2 用户基本信息
const userinfoRouter = require('./router/var_userInfo')
app.use('/my', userinfoRouter)
// 7.3 表格数据
const userTableRouter = require('./router/var_table_list')
app.use('/data', userTableRouter)
// 7.4 search
const userSearchRouter = require('./router/var_search')
app.use('/data', userSearchRouter)
//标记-----------------------------------------------------------------------------

// 定义错误级别的中间件,验证失败导致的错误 登陆注册先关掉
app.use((err, req, res, next) => {
  if (err instanceof joi.ValidationError) return res.send(err)
  if (err.name === 'UnauthorizedError') return res.send('身份认证失败')
  // 未知的错误
  res.fa(err)
})

// 3) 启动服务器,指定端口号并启动web服务器
app.listen(3006, () => {
  console.log('运行于的api服务器 http://127.0.0.1:3006')
})
